// PROGRAMA : TABPA001 OPCAO: 'ATA'
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO, DETRAN E SEFAZ
// PROGRAMADOR : EDU/FM DATA: 27/05/92
// OBJETIVO : ATUALIZAR TABELAS DE APOIO. ROT: TABSATU
// ATUALIZACOES DATA
// PROGRAMA : TABPA001 07/11/1997
// BIBLIOTECA : PRODETR
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// ALTERACAO DO MAPA TABTA001, E DA
// DATA DE ATUALIZACAO DINTAB-DATATU EM 01/08/1999
// ALTERACAO DE DATAS N6 PARA N8 BUG ANO 2000
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha01;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha02;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabta001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabtap01;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpa001 OBJETIVO : ATUALIZAR TABELAS DE APOIO. ROT: TABSATU *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpa001")
public class Tabpa001 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Sistha01 sistha01;
	Sistha02 sistha02;
	Tabta001 tabta001;
	Tabtap01 tabtap01;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpa001 tabpa001Anterior;
	String faseproc = "0";

	private String chalfa1g = "";
	private String descel1 = "";
	private String observ = "";
	private int data = 0;
	private int date = 0;

	private Tabta001 preMapas() {
		sistha01 = new Sistha01(true, sessao);
		sistha02 = new Sistha02(true, sessao);
		tabta001 = new Tabta001(true, sessao);
		tabtap01 = new Tabtap01(true, sessao);

		tabta001.setDataCorrente(UtilBean.obtemDataCorrente());
		tabta001.setDataCorrente(UtilBean.inverteDataCorrente());
		tabta001.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		date = UtilBean.obtemDataCorrente();

		sistha01.setNavegar("../tabpa001/executar");
		sistha02.setNavegar("../tabpa001/executar");
		tabta001.setNavegar("../tabpa001/executar");
		tabtap01.setNavegar("../tabpa001/executar");

		tabta001.setDintabdatatu(UtilBean.inverteDataCorrente());
		tabta001.setDintabmatfun(sessao.getSisgsisp().getMatric());

		tabtap01.setDataCorrente(UtilBean.obtemDataDia());
		tabtap01.setDintabmatfun(sessao.getSisgsisp().getMatric());
		data = UtilBean.obtemDataCorrente();
		// Par�grafo: r0()
		return tabta001;
	}

	public Tabpa001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Sistha01 sistha01, Sistha02 sistha02, Tabta001 tabta001, Tabtap01 tabtap01) {
		try {
			main(sistha01, sistha02, tabta001, tabtap01);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Sistha01 psistha01, Sistha02 psistha02, Tabta001 ptabta001, Tabtap01 ptabtap01) {
		if (psistha01 == null && psistha02 == null && ptabta001 == null && ptabtap01 == null) {
			primeiraVez = true;
			// tabta001 = new Tabta001 (primeiraVez);
			tabta001 = preMapas();
			tabta001.setNavegar("../tabpa001/executar");
			result.include("tabta001", tabta001);
			sessao.setAtributo("TABPA001", this);
			tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(psistha01, psistha02, ptabta001, ptabtap01);
		}

		observ = "";
		// tabta001.setGrupel("");
		// tabta001.setDatapo(0);
		// tabtap01.setChalfa1("");
		sessao.getSisgsisp().setVar(10);

		tabtap01.setSn("N");

		if (ptabta001 != null) {
			tabta001.receberTela(false, result);
		}
		// TELA ATUALIZACAO DE TABELA
		if (tabta001.getCodtab() == 888) {

			if (!tabtap01.getEnviada()) {
				tabtap01.setEnviada(true);
				tabtap01.setDesc1(tabta001.getDesc1());
				tabtap01.setCodele(tabta001.getCodele());
				tabtap01.setChalfa1(tabta001.getChalfa1());
				// divide desc2
				tabtap01.setDesp1("POSTO -");
				String desc2 = StringUtils.rightPad(tabta001.getDescr2(), 30, " ");
				String tporto = StringUtils.mid(desc2, 8, 3);
				String desc2Tela2 = StringUtils.mid(desc2, 14, desc2.length());
				tabtap01.setTposto(Integer.valueOf(StringUtils.isNumeric(tporto) ? tporto : "0"));
				tabtap01.setDesc2(desc2Tela2);

				result.include("tabtap01", tabtap01);
				sessao.setAtributo("TABPA001", this);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (ptabtap01 != null) {
				tabtap01.receberTela(false, result);
			}

			if (tabtap01.temMensagem) {

				tabtap01.setEnviada(true);

				result.include("tabtap01", tabtap01);
				sessao.setAtributo("TABPA001", this);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;

			}
			if (ptabtap01 != null) {
				tabta001.setCodele(tabtap01.getCodele());
				// DESC1
				tabta001.setDesc1(tabtap01.getDesc1());

				// desc2

				tabta001.setChalfa1(tabtap01.getChalfa1());
				// divide desc2
				String desp1 = tabtap01.getDesp1();
				desp1 = StringUtils.rightPad(desp1, 8, " ");// 8

				String tposto = tabtap01.getTposto() + "";
				tposto = StringUtils.leftPad(tposto, 3, "0");// 3

				String desp3 = "   ";// 3

				String desc2_tela2 = tabtap01.getDesc2();
				desc2_tela2 = StringUtils.rightPad(desc2_tela2, 16, " ");// 16

				String desc2 = desp1 + tposto + desp3 + desc2_tela2;
				desc2 = StringUtils.rightPad(desc2, 30, " ");

				tabta001.setDescr2(desc2);

			}
		}
		// TELA DE ATUALIZACAO DAS USER-ID POR POSTO
		if (!tabtap01.getOperacao().equals("ATA")) {
			saida();
		}
		if (tabta001.getCodtab() == 0) {
			tabtap01.enviarMensagem("codtab", "");
			tabta001.setNavegar("../tabpa001/executar");
			result.include("tabta001", tabta001);
			sessao.setAtributo("TABPA001", this);
			tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		if (tabta001.getCodtab() == 18) {
			tabtap01.enviarMensagem("codtab", "");
			tabta001.setNavegar("../tabpa001/executar");
			result.include("tabta001", tabta001);
			sessao.setAtributo("TABPA001", this);
			tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		if (tabta001.getCodtab() == 015) {
			tabtap01.enviarMensagem("codtab", "");
			tabta001.setNavegar("../tabpa001/executar");
			result.include("tabta001", tabta001);
			sessao.setAtributo("TABPA001", this);
			tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		if (tabta001.getCodele() == 0) {
			tabtap01.enviarMensagem("codele", "");
			tabta001.setNavegar("../tabpa001/executar");
			result.include("tabta001", tabta001);
			sessao.setAtributo("TABPA001", this);
			tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		while (vwDvetab.pesquisaTabele(tabta001.getCodtab(), tabta001.getCodele())) {

			tabtap01.setSn("S");

			tabta001.receberTela(false, result);
			// TELA ATUALIZACAO DE TABELA
			if (!tabtap01.getOperacao().equals("ATA")) {
				funcoes.sissm001(result, sessao);
			}
			if (!tabta001.getEnviada()) {
				recebeDadosView();
				tabta001.setEnviada(true);
				// tabta001.enviarMensagem(null, "TECLE PF5 PARA ATUALIZAR");
				tabta001.setNavegar("../tabpa001/executar");
				result.include("tabta001", tabta001);
				sessao.setAtributo("TABPA001", this);
				tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (!sistha01.getEnviada()) {
				sistha01.setEnviada(true);
				sessao.setAtributo("TABPA001", this);
				result.include("sistha01", sistha01);
				sistha01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (psistha01 != null) {
				sistha01.receberTela(false, result);
			}
			// TELA ALTERACAO OU BAIXA
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				tabta001.setMensagemSaida("ALTERACAO NAO FOI EXECUTADA");

				tabta001.setNavegar("../tabpa001/executar");
				result.include("tabta001", tabta001);
				sessao.setAtributo("TABPA001", this);
				tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				break;
			}
			funcoes.tabsatu(sessao);
			if (!funcoes.camret.equals("")) {
				tabta001.setNavegar("../tabpa001/executar");
				tabta001.enviarMensagem(funcoes.camret, "");
				sessao.setAtributo("TABPA001", this);
				result.include("tabta001", tabta001);
				tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (!sistha01.getOp2().trim().equals("")) {

				enviarToView();
				vwDvetab.atualiza();
				// dao.commit();
				preMapas();
				tabta001.setMensagemSaida(" REGISTRO ALTERADO OK.");
				// faseproc = "0";
				sessao.setAtributo("TABPA001", this);
				result.include("tabta001", tabta001);
				tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

				break;
			}
			if (!sistha01.getOp3().trim().equals("")) {
				vwDvetab.exclui();
				// dao.commit();
				preMapas();
				tabta001.setMensagemSaida("REGISTRO DELETADO OK.");
				// faseproc = "0";
				sessao.setAtributo("TABPA001", this);
				result.include("tabta001", tabta001);
				tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

				return;

			}

		}
		if (vwDvetab.registrosProcessados() == 0) {
			// tabta001.setMensagemSaida("REGISTRO INEXISTENTE - TECLE PF5 PARA INCLUIR");

			tabtap01.setSn("S");

			tabta001.receberTela(false, result);
			// TELA ATUALIZACAO DE TABELA
			if (!tabtap01.getOperacao().equals("ATA")) {
				saida();
			}
			if (!tabta001.getEnviada()) {
				tabta001.setEnviada(true);
				tabta001.setMensagemSaida("REGISTRO INEXISTENTE - TECLE ENTER INCLUIR");
				sessao.setAtributo("TABPA001", this);
				result.include("tabta001", tabta001);
				tabta001.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (!sistha02.getEnviada()) {
				sistha02.setEnviada(true);
				sessao.setAtributo("TABPA001", this);
				result.include("sistha02", sistha02);
				sistha02.setMensagemSaida("CONFIRMA?");
				sistha02.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (psistha02 != null) {
				sistha02.receberTela(false, result);
			}
			// TELA CONFIRMA
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				tabta001.setMensagemSaida("REGISTRO NAO ATUALIZADO");
				result.include("tabta001", tabta001);
				tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			funcoes.tabsatu(sessao);
			if (!funcoes.camret.equals("")) {
				sistha02.enviarMensagem(funcoes.camret, "SEM ACESSO " + funcoes.camret);
				sessao.setAtributo("TABPA001", this);
				result.include("sistha02", sistha02);
				sistha02.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			enviarToView();
			vwDvetab.grava();
			// faseproc = "0";
			// dao.commit();
			preMapas();
			tabta001.setMensagemSaida(" REGISTRO INCLUIDO OK.");
		}
		sessao.setAtributo("TABPA001", this);
		result.include("tabta001", tabta001);
		if (!result.used())
			tabta001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void saida() {
		funcoes.sissm001(result, sessao);
	} // SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" tabta001.getNomeClasse()
		// tabtap01.getNomeClasse() "!");

	private void restaurarEstados(Sistha01 psistha01, Sistha02 psistha02, Tabta001 ptabta001, Tabtap01 ptabtap01) {
		this.tabpa001Anterior = (Tabpa001) sessao.getAtributo("TABPA001");
		if (psistha01 != null) {
			sistha01 = psistha01;
		} else {
			sistha01 = this.tabpa001Anterior.sistha01;
		}
		sistha01.setSessao(sessao);
		if (psistha02 != null) {
			sistha02 = psistha02;
		} else {
			sistha02 = this.tabpa001Anterior.sistha02;
		}
		sistha02.setSessao(sessao);
		if (ptabta001 != null) {
			tabta001 = ptabta001;
		} else {
			tabta001 = this.tabpa001Anterior.tabta001;
		}
		tabta001.setSessao(sessao);
		if (ptabtap01 != null) {
			tabtap01 = ptabtap01;
		} else {
			tabtap01 = this.tabpa001Anterior.tabtap01;
		}
		tabtap01.setSessao(sessao);
		this.faseproc = this.tabpa001Anterior.faseproc;
		this.sistha02.setEnviada(this.tabpa001Anterior.sistha02.getEnviada());
		this.tabta001.setEnviada(this.tabpa001Anterior.tabta001.getEnviada());
		this.sistha01.setEnviada(this.tabpa001Anterior.sistha01.getEnviada());
		this.tabtap01.setEnviada(this.tabpa001Anterior.tabtap01.getEnviada());
		this.tabta001.setEnviada(this.tabpa001Anterior.tabta001.getEnviada());

	}

	private void recebeDadosView() {

		tabta001.setMensagemSaida("REGISTRO EXISTENTE - TECLE PF5 PARA ATUALIZAR");
		descel1 = vwDvetab.getDescricaoElem();
		String desc1 = StringUtils.substring(vwDvetab.getDescricaoElem(), 0, 30);
		String desc2 = StringUtils.substring(vwDvetab.getDescricaoElem(), 30, 60);
		tabta001.setDesc1(desc1);
		tabta001.setDescr2(desc2);
		tabta001.setChalfa1(vwDvetab.getChaveAlfaAcesso());
		String obs1 = StringUtils.substring(vwDvetab.getObservacao(), 0, 30);
		String obs2 = StringUtils.substring(vwDvetab.getObservacao(), 30, 60);
		tabta001.setObs1(obs1);
		tabta001.setObs2(obs2);
		tabta001.setGrupel(vwDvetab.getGrupoElem());
		tabta001.setDatapo(vwDvetab.getDataApoio());
	}

	private void enviarToView() {

		vwDvetab.setDataAtualizacao(UtilBean.obtemDataCorrente());
		vwDvetab.setMatriculaFunc(sessao.getSisgsisp().getMatric());
		vwDvetab.setCodigoTabela(tabta001.getCodtab());
		vwDvetab.setCodigoElem(tabta001.getCodele());
		String desc1 = StringUtils.rightPad(tabta001.getDesc1(), 30, " ");
		String desc2 = StringUtils.rightPad(tabta001.getDescr2(), 30, " ");
		vwDvetab.setDescricaoElem(desc1 + desc2);
		String obs1 = StringUtils.rightPad(tabta001.getObs1(), 30, " ");
		String obs2 = StringUtils.rightPad(tabta001.getObs2(), 30, " ");

		vwDvetab.setChaveAlfaAcesso(tabta001.getChalfa1());
		vwDvetab.setObservacao(obs1 + obs2);
		vwDvetab.setDataApoio(tabta001.getDatapo());
		vwDvetab.setGrupoElem(tabta001.getGrupel());

	}
}
